/**
 * 建筑物配置
 * 定义可替换的建筑物信息
 */

export const buildingConfig = [
  {
    id: 'building_001',       // 建筑物ID
    name: '示例大厦A',        // 建筑物名称
    type: '商业办公',         // 建筑物类型
    height: 120,             // 建筑物高度（米）
    area: 25000,             // 建筑物面积（平方米）
    description: '这是一座现代化的商业办公大厦，拥有完善的设施和智能化管理系统。',
    position: {              // 建筑物位置（经纬度）
      latitude: 39.908823,
      longitude: 116.397470
    },
    modelUrl: '/static/models/building_a.gltf', // 模型文件路径
    scale: 1.0,              // 模型缩放比例
    rotation: 0,             // 模型旋转角度（度）
    offset: {                // 模型位置偏移
      x: 0,
      y: 0,
      z: 0
    }
  },
  {
    id: 'building_002',
    name: '示例大厦B',
    type: '商住两用',
    height: 88,
    area: 18000,
    description: '这是一座集商业和住宅为一体的综合性建筑，低层为商业，高层为住宅。',
    position: {
      latitude: 39.906823,
      longitude: 116.395470
    },
    modelUrl: '/static/models/building_b.gltf',
    scale: 0.8,
    rotation: 45,
    offset: {
      x: 0,
      y: 0,
      z: 0
    }
  },
  {
    id: 'building_003',
    name: '示例大厦C',
    type: '文化设施',
    height: 65,
    area: 12000,
    description: '这是一座现代化的文化中心，内设图书馆、展览馆和多功能厅等设施。',
    position: {
      latitude: 39.907823,
      longitude: 116.396470
    },
    modelUrl: '/static/models/building_c.gltf',
    scale: 1.2,
    rotation: 90,
    offset: {
      x: 0,
      y: 0,
      z: 0
    }
  }
];

/**
 * 根据ID获取建筑物配置
 * @param {String} id 建筑物ID
 * @returns {Object|null} 建筑物配置对象
 */
export const getBuildingById = (id) => {
  return buildingConfig.find(building => building.id === id) || null;
};

/**
 * 根据位置获取最近的建筑物
 * @param {Number} latitude 纬度
 * @param {Number} longitude 经度
 * @param {Number} maxDistance 最大距离（米），默认100米
 * @returns {Object|null} 建筑物配置对象
 */
export const getBuildingByPosition = (latitude, longitude, maxDistance = 100) => {
  // 计算两点之间的距离（简化版，不考虑地球曲率）
  const calculateDistance = (lat1, lng1, lat2, lng2) => {
    const R = 6371000; // 地球半径，单位米
    const dLat = (lat2 - lat1) * Math.PI / 180;
    const dLng = (lng2 - lng1) * Math.PI / 180;
    const a = Math.sin(dLat/2) * Math.sin(dLat/2) +
              Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *
              Math.sin(dLng/2) * Math.sin(dLng/2);
    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    return R * c;
  };
  
  let nearestBuilding = null;
  let minDistance = maxDistance;
  
  buildingConfig.forEach(building => {
    const distance = calculateDistance(
      latitude,
      longitude,
      building.position.latitude,
      building.position.longitude
    );
    
    if (distance < minDistance) {
      minDistance = distance;
      nearestBuilding = building;
    }
  });
  
  return nearestBuilding;
};